#ifndef __EXPORT_C_H__
#define __EXPORT_C_H__

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

//可变参数 输出
#if LOGGER_CONFIG_SHOW_SRC_INFO_EN > 0
#define FW_Debug(...)  FW_LogDebugSrc(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define FW_Info(...)  FW_LogInfoSrc(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define FW_Warn(...)  FW_LogWarnSrc(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define FW_Error(...)  FW_LogErrorSrc(__FILE__, __LINE__, __func__, __VA_ARGS__)
#define FW_Fatal(...)  FW_LogFatalSrc(__FILE__, __LINE__, __func__, __VA_ARGS__)
#else 
#define FW_Debug(...)  FW_LogDebug(__VA_ARGS__)
#define FW_Info(...)  FW_LogInfo(__VA_ARGS__)
#define FW_Warn(...)  FW_LogWarn(__VA_ARGS__)
#define FW_Error(...)  FW_LogError(__VA_ARGS__)
#define FW_Fatal(...)  FW_LogFatal(__VA_ARGS__)
#endif 
//

void FW_DelayUs(uint32_t us);
void FW_DelayMs(uint32_t ms);
uint32_t FW_GetCurrentCpuMilliseconds();

void FW_UartSend(int id, const uint8_t *buf, int len);

//log
void FW_LogDebugSrc(const char *file, int line, const char *func, const char*  format, ...);
void FW_LogInfoSrc(const char *file, int line, const char *func, const char*  format, ...);
void FW_LogWarnSrc(const char *file, int line, const char *func, const char*  format, ...);
void FW_LogErrorSrc(const char *file, int line, const char *func, const char*  format, ...);
void FW_LogFatalSrc(const char *file, int line, const char *func, const char*  format, ...);

void FW_LogDebug(const char*  format, ...);
void FW_LogInfo(const char*  format, ...);
void FW_LogWarn(const char*  format, ...);
void FW_LogError(const char*  format, ...);
void FW_LogFatal(const char*  format, ...);

//
void FW_Timer_RaiseElapsed(int id);
void FW_Timer_RaiseElapsedByHandle(void *handle);

void FW_Timer_RaiseOcIrq(int id, int channel);
void FW_Timer_RaiseOcIrqByHandle(void *handle, int channel);

void FW_AppMain();

#ifdef __cplusplus
}
#endif

#endif // __EXPORT_C_H__